package com.qining618.cms.ucenter.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qining618.cms.ucenter.domain.User;

import java.util.Date;
import java.util.Map;

/**
 * @author flt
 * @date 2019-09-20
 */
public interface AdminService extends IService<User> {

    /**
     * 分页搜索
     * @param params 参数
     * @return IPage
     */
    IPage<User> page(Map<String, Object> params);

    /**
     * 添加
     * @param nickname 昵称
     * @param username 用户名
     * @param password 密码
     * @param roleId 角色id
     * @return UserEntity
     */
    User add(String nickname, String username, String password, Long roleId);

    /**
     * 修改
     * @param id 主键
     * @param nickname 昵称
     * @param username 用户名
     * @param roleId 角色id
     * @return UserEntity
     */
    User modify(Long id, String nickname, String username, Long roleId);

    /**
     * 重置密码
     * @param id 主键
     * @param password 密码
     */
    void resetPassword(Long id, String password);

    /**
     * 根据用户名查询用户信息
     * @param username 用户名
     * @return User 用户信息
     */
    User findByUsername(String username);

    /**
     * 根据用户id获取用户信息
     * @param userId 用户id
     * @return User 用户信息
     */
    User findById(Long userId);

    /**
     * 登录成功更新
     * @param userId 用户id
     * @param ip 客户端ip
     */
    void updateLoginSuccess(Long userId, String ip);

    /**
     * 登录失败更新
     * @param userId 用户id
     * @param ip 客户端ip
     */
    void updateLoginError(Long userId, String ip);

    /**
     * 冻结
     * @param userId 用户id
     * @param dueTime 到期时间
     * @param reason 冻结原因
     */
    void freeze(Long userId, Date dueTime, String reason);

    /**
     * 解冻
     * @param userId 用户id
     */
    void unFreeze(Long userId);
}
